import CryptoJS from 'crypto-js/crypto-js' // 加密
// import Taro, { ENV_TYPE } from "@tarojs/taro";
// import { getStorageValue } from './StorageTool';

/// 服务器域名
let domain = "http://api.gemvary.tech:8443"

/**
 * Get相关请求
 */
export async function getJson(path, params, success, fail, error) {

    // 组装成URL
    let url = domain + path
    // 组装header
    let headers = {
        // "Content-Type": "application/json", // RN
        'content-type': 'application/json', // TARO
        "X-WX-ENV": "DEV",
        "X-API-KEY": getAPIKey(HTTPMethod.GET, path), // 加密方法设置
    }

    // /// 获取值
    // const access_token = await getStorageValue('access_token')
    // const token_type = await getStorageValue('token_type')

    // console.log("保存数据 access_token::" + access_token)
    // console.log("保存数据 token_type::" + token_type)

    // // 校验Token
    // if (access_token !== "" && token_type !== "") {
    //     // 设置认证header
    //     headers["Authorization"] = token_type + " " + access_token
    // }

    // Taro.request({
    //     method: HTTPMethod.GET,
    //     url: url, 
    //     data: params,
    //     header: headers,
    //     success: function (res) {
    //         //console.log("请求返回内容 WX: " + JSON.stringify(res.data))                    
    //         // 成功回调
    //         success && success(res.data)
    //     }, fail: function (data) {
    //         //console.log("请求失败了" + JSON.stringify(res.data))
    //         // 失败回调
    //         fail && fail(data)
    //     }
    // })
}


/**
 * POST请求接口
 */
export async function postJson(path, params, success, fail, error) {
    // 组装成URL
    let url = domain + path
    // 组装header
    let headers = {
        // "Content-Type": "application/json", // RN
        'content-type': 'application/json', // TARO
        "X-WX-ENV": "DEV",
        "X-API-KEY": getAPIKey(HTTPMethod.POST, path), // 加密方法设置
    }

    // /// 获取值
    // const access_token = await getStorageValue('access_token')
    // const token_type = await getStorageValue('token_type')

    // // console.log("保存数据 access_token::" + access_token)
    // // console.log("保存数据 token_type::" + token_type)

    // // 校验Token
    // if (access_token !== "" && token_type !== "") {
    //     headers["Authorization"] = token_type + " " + access_token
    // }

    // /// TARO的网络请求
    // Taro.request({
    //     method: HTTPMethod.POST,
    //     url: url, //仅为示例，并非真实的接口地址
    //     data: params,
    //     header: headers,
    //     success: function (res) {
    //         //console.log("请求返回内容 WX: " + JSON.stringify(res.data))
    //         // 成功回调
    //         success && success(res.data)
    //     }, fail: function (data) {
    //         //console.log("请求失败了" + JSON.stringify(res.data))
    //         // 失败回调
    //         fail && fail(data)
    //     }
    // })

    // if (Taro.env === ENV_TYPE.RN) {
    //     // RN环境
    //     /// RN的网络请求
    //     fetch(url, {
    //         method: HTTPMethod.POST,
    //         headers: headers,
    //         body: JSON.stringify(params)
    //     }).then(response => {
    //         console.log("网络请求的状态：" + response.status)
    //         // 判断状态码
    //         switch (response.status) {
    //             case 200: // 成功
    //                 break;
    //             case 400: // 请求错误
    //                 break
    //             case 401: // 未鉴权认证(需要刷新token)
    //                 break
    //             default:
    //                 break
    //         }
    //         return response.json()
    //     }
    //     )
    //         //把response转为json
    //         .then((responseJson) => {
    //             // 拿到上面的转好的json
    //             //根据实际的请求回来格式来处理回调
    //             console.log("请求返回内容 RN:" + JSON.stringify(responseJson));                    

    //             success && success(responseJson)

    //             // if (responseJson['success'] === true) {
    //             //     // 0为请求成功
    //             //     success && success(responseJson)
    //             // } else {
    //             //     fail && fail(responseJson)
    //             //     //可以处理返回的错误信息
    //             // }
    //         }).catch(e => {
    //             console.log(e)
    //             error && error(e)
    //             // ToastUtil.show("请检查您的网络是否已经连接");
    //         })
    // } else {
    //     /// TARO的网络请求
    //     Taro.request({
    //         method: HTTPMethod.POST,
    //         url: url, //仅为示例，并非真实的接口地址
    //         data: params,
    //         header: headers,
    //         success: function (res) {
    //             console.log("请求返回内容 WX: " + JSON.stringify(res.data))                    
    //             // 成功回调
    //             success && success(res.data)
    //         }, fail: function (data) {
    //             console.log("请求失败了" + JSON.stringify(res.data))
    //             // 失败回调
    //             fail && fail(data)
    //         }
    //     })
    // }                 
}


/**
 * 网络请求工具
 */
const RequestTool = {

    /**
     * GET请求方法
     */    
    // getJson: (path, params, success, fail, error) => {

    //     // 组装成URL
    //     let url = domain + path
    //     // 组装header
    //     let headers = {
    //         // "Content-Type": "application/json", // RN
    //         'content-type': 'application/json', // TARO
    //         "X-WX-ENV": "DEV",
    //         "X-API-KEY": getAPIKey(HTTPMethod.GET, path), // 加密方法设置
    //     }

    //     // var access_token = ""
    //     // try {
    //     //     Taro.getStorage({
    //     //         key: 'access_token',
    //     //         success: function (res) {
    //     //             console.log("取出返回的内容:::" + res.data)
    //     //             access_token = res.data;
    //     //             // return res.data
    //     //         }, fail: function (res) {
    //     //             console.log("失败了:: " + res.data)
    //     //         }                            
    //     //     })
    
    //     // } catch (e) {
    //     //     console.log("失败了" + e)
    //     // }
    //     // console.log("保存数据内容::???" + JSON.stringify(access_token))

    //     // getToken()
    //     const access_token =  getStorageValue('access_token')
    //     console.log("保存数据内容::???" + JSON.stringify(access_token))

        

    //     // 校验Token
    //     if (TokenTool.access_token !== "" && TokenTool.token_type !== "") {
    //         headers["Authorization"] = TokenTool.token_type + " " + TokenTool.access_token
    //     }

    

    //     // Taro的请求方法
    //     Taro.request({
    //         method: HTTPMethod.GET,
    //         url: url, //仅为示例，并非真实的接口地址
    //         data: params,
    //         header: headers,
    //         success: function (res) {
    //             //console.log("请求返回内容 WX: " + JSON.stringify(res.data))                    
    //             // 成功回调
    //             success && success(res.data)
    //         }, fail: function (data) {
    //             //console.log("请求失败了" + JSON.stringify(res.data))
    //             // 失败回调
    //             fail && fail(data)
    //         }
    //     })
    // },

     /**
      * POST请求接口
      */
     postJson: (path, params, success, fail, error) => {
        // 组装成URL
        let url = domain + path
        // 组装header
        let headers = {
            // "Content-Type": "application/json", // RN
            'content-type': 'application/json', // TARO
            "X-WX-ENV": "DEV",
            "X-API-KEY": getAPIKey(HTTPMethod.POST, path), // 加密方法设置
        }

         // 校验Token
         if (TokenTool.access_token !== "" && TokenTool.token_type !== "") {
             headers["Authorization"] = TokenTool.token_type + " " + TokenTool.access_token
         }

        if (Taro.env === ENV_TYPE.RN) {
            // RN环境
            /// RN的网络请求
            fetch(url, {
                method: HTTPMethod.POST,
                headers: headers,
                body: JSON.stringify(params)
            }).then(response => {
                console.log("网络请求的状态：" + response.status)
                // 判断状态码
                switch (response.status) {
                    case 200: // 成功
                        break;
                    case 400: // 请求错误
                        break
                    case 401: // 未鉴权认证(需要刷新token)
                        break
                    default:
                        break
                }
                return response.json()
            }
            )
                //把response转为json
                .then((responseJson) => {
                    // 拿到上面的转好的json
                    //根据实际的请求回来格式来处理回调
                    console.log("请求返回内容 RN:" + JSON.stringify(responseJson));                    

                    success && success(responseJson)

                    // if (responseJson['success'] === true) {
                    //     // 0为请求成功
                    //     success && success(responseJson)
                    // } else {
                    //     fail && fail(responseJson)
                    //     //可以处理返回的错误信息
                    // }
                }).catch(e => {
                    console.log(e)
                    error && error(e)
                    // ToastUtil.show("请检查您的网络是否已经连接");
                })
        } else {
            /// TARO的网络请求
            Taro.request({
                method: HTTPMethod.POST,
                url: url, //仅为示例，并非真实的接口地址
                data: params,
                header: headers,
                success: function (res) {
                    console.log("请求返回内容 WX: " + JSON.stringify(res.data))                    
                    // 成功回调
                    success && success(res.data)
                }, fail: function (data) {
                    console.log("请求失败了" + JSON.stringify(res.data))
                    // 失败回调
                    fail && fail(data)
                }
            })
        }                 
    },

}

/// 网络请求方法
const HTTPMethod = {
    CONNECT: 'CONNECT',
    DELETE: 'DELETE',
    GET: 'GET',
    HEAD: 'HEAD',
    OPTIONS: 'OPTIONS',
    PATCH: 'PATCH',
    POST: 'POST',
    PUT: 'PUT',
    QUERY: 'QUERY',
    TRACE: 'TRACE',
}

/**
 * header加密
 */
const getAPIKey = (method, path) => {

    const appId = "e57d124a11ce4ad1a7a73af16d5f1a22"
    const appSecret = "gpOjPS76CzrMZRwqWysmW6HP9mgTFu4v"

    let sha256Data = CryptoJS.HmacSHA256(method + path, appSecret);
    // 使用16进制的方法加密，输出字符串
    let sha256Str= CryptoJS.enc.Hex.stringify(sha256Data);

    // var hash = CryptoJS.HmacSHA256("Message", val);
    // var testStr = CryptoJS.enc.Base64.stringify(test);

    console.log("加密后的内容" + sha256Str)

    //let apiKey = "key=e57d124a11ce4ad1a7a73af16d5f1a22;sign=" + sha256Str
    let apiKey = `key=${appId};sign=` + sha256Str
    console.log("加密后的内容111" + apiKey)

    return apiKey
}

export default RequestTool;